未命名

某电影公司发行了 2 部电影。有 n 人观看了这 2 部电影。我们知道每个人对第一部电影的态度(喜欢、中立或不喜欢)以及对第二部电影的态度。

如果要求某人对电影留下评论,那么:

每个人都会评论一部电影,您可以为每个人选择评论哪部电影。

公司的评分是两部电影评分的最小值。您的任务是计算公司可能获得的最高评分。

思路:只有两个都是 1 或-1 的时候才会单独考虑,枚举即可。

void solve() {
    int n;cin >> n;
    vector<int> a(n), b(n);
    for (auto& i : a)cin >> i;
    for (auto& i : b)cin >> i;
    int cnt1 = 0, cnt2 = 0;
    int pos = 0, neg = 0;
    for (int i = 0;i < n;i++) {
        if (a[i] == b[i]) {
            if (a[i] == 1) {
                pos++;
            }
            if (a[i] == -1) {
                neg++;
            }
            continue;
        }
        if (a[i] > b[i]) {
            cnt1 += a[i];
        } else {
            cnt2 += b[i];
        }
    }
    int ans = -1e9;
    for (int i = -neg;i <= pos;i++) {
        int x = cnt1 + i;
        int y = pos - neg - i + cnt2;
        ans = max(ans, min(x, y));
    }
    cout << ans << '\n';
}